#include <iostream>

using namespace std;

typedef long long LL;

const int N = 1e6 + 10;
const LL P = 1e9 + 7;
int cnt[N];
int n, m, k;
LL dp[N];
LL f[N], g[N];

LL qpow(LL a, LL b, LL P)
{
	LL ret = 1;
	while(b)
	{
		if(b & 1) ret = ret * a % P;
		b >>= 1;
		a = a * a % P;
	}
	return ret;
}

//void init()
//{
// f[0] = 1;
// for(int i = 1; i <= n; i++) f[i] = i * f[i - 1] % P;
// g[n] = qpow(f[n], P - 2, P);
// for(int i = n - 1; i >= 0; i--) g[i] = (i + 1) * g[i + 1] % P;
// for(int i = 0; i <= 10; i++) cout << g[i] << " ";
//}

void init()
{
	f[0] = 1;
	for(int i = 1; i <= n; i++) f[i] = f[i - 1] * i % P;
	
	g[n] = qpow(f[n], P - 2, P);
	for(int i = n - 1; i >= 0; i--) g[i] = g[i + 1] * (i + 1) % P;	
	for(int i = 0; i <= 10; i++) cout << g[i] << " ";
}

LL C(int x, int k)
{
	if(k > x) return 0;
	return f[x] * g[k] % P * g[x - k] % P;
}

int main()
{
	
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++)
	{
		int x; cin >> x;
		cnt[x]++;
	}
	init();
	for(int i = m; i >= 1; i--)
	{
		LL x = 0, y = 0;
		for(int j = i; j <= m / i * i; j += i) 
		{
			x += cnt[j];
			y += dp[j];
		}
		dp[i] = ((C(x, k) - y) % P + P) % P;
//		for(int j = 2 * i; j <= m / i * i; j += i) dp[i] -= dp[j];
	}
	for(int i = 1; i <= m; i++) cout << (dp[i] % P + P) % P << " ";
	return 0;
}
